Today's enterprises are increasingly dependent on software applications acquired from various sources for their daily operations. As the complexity of the applications grows, it becomes increasingly difficult to coordinate their operations. These applications may be implemented in different programming languages, provide different interfaces, and organize their data according to different schemas. Additionally, each application may be maintained and supported by a different support team (e.g., a different vendor) that has little knowledge of the technical details of the other applications used by an enterprise.
One approach for integrating the applications is to rewrite the code so that the applications can communicate with each other, share the same interface and use the same schema. However, rewriting the code can be time consuming and error prone. Further, after the code is rewritten, the original support teams for the applications may no longer be able to support the rewritten applications.